// 函数被频繁调用的场景,需要节流
// 1. window.onresize 事件
// 2. mousemove 事件
// 3. 上传进度

/**
 * 下面的 throttle 函数的原理是，将即将执行的函数用 setTimeOut 延迟一段时间执行。如果该次延迟执行还没有完成，则忽略接下来调用该函的请求。
 */

var throttle = function (fn, interval) {
    var __self = fn, // 保存需要被延迟执行的函数引用
        timer,
        firstTime = true;

    return function () {
        var args = arguments,
            __me = this;
        // 如果是第一次调用，不需要延迟执行
        if (firstTime) {
            __self.apply(__me, args)
            return firstTime = false
        }
        // 如果定时器还在，说明前一次延迟执行
        if (timer) {
            return false
        }
        // 延迟一段时间执行
        timer = setTimeout(() => {
            clearTimeout(timer);
            timer = null;
            __self.apply(__me, args)
        }, interval || 500);
    }
}

window.onresize = throttle(function () {
    console.log(1);
}, 500)
